#! /bin/bash
#################################################################
# @Description: 用例名称：文件系统-文件处理能力，测试目的：操作系统支持最大文件不小于4TB，最大分区与文件系统不小于10PB，最大文件名长度不小于255字节
# @Date : 2023-11-22
# @Last Modified by :
# @Last Modified time:2023-11-25
#################################################################
set -euo pipefail
res=0
bc_installed=1
### 需要手动修改为测试环境中的磁盘
read -p "请输入测试中的磁盘名称：(格式:/dev/sdb或/dev/hdb ) " HDisk_full

echo "0.安装bc软件包"
yum install bc -y | grep "Installed:" > /dev/null 2>&1 && bc_installed=0
[ "$bc_installed" = "0" ] && echo "bc软件包安装成功" || echo "bc软件包已安装"
echo "1.格式化空闲磁盘"
HDisk_last=$(echo $HDisk_full | awk -F '/' '{print $3}')
disk_size=$(lsblk --bytes | grep $HDisk_last | awk '{sum = $4/1024/1024/1024/1024} END {printf "%.1f", sum}')
if (( $(echo "$disk_size > 1" | bc -l) )); then
    parted -s $HDisk_full mklabel gpt
	parted -s $HDisk_full mkpart logic 0 1T
	if [[ $HDisk_full =~ 'nvme' ]]; then 
		HDisk=${HDisk_full}p1
	else
		HDisk=${HDisk_full}1
	fi
else
    HDisk=${HDisk_full}
fi
wipefs -a $HDisk
mkfs.ext4 $HDisk
echo -e "\n\n"
echo  "2.验证ext4文件系统最大文件不小于4TB"
echo "查看ext4文件系统块大小"
tune2fs -l $HDisk | grep "Block size" |grep 4096 && echo "block size * (2^32 - 1) bytes=16 TB,支持最大文件16TB不小于4TB" || res=1
#Block size:               4096
echo -e "\n\n"
# 3.验证ext4文件系统最大分区与文件系统不小于10PB
# 根据ext4官方网站https://ext4.wiki.kernel.org/index.php/Ext4_Howto#Bigger_File_System_and_File_Sizes可知最大分区与文件系统为1EB，不小于10PB
echo "3.确认使用的是64位系统"
uname -r |grep 64 || res=1
echo -e "\n\n"

echo "4.确认使用的是64bit feature的ext4"
# 使用64位内核和扩展的ext4文件系统格式（64-bit feature），最大分区大小可以达到1EB（2^60个字节）
tune2fs -l $HDisk |grep 64bit && echo "使用64位内核和扩展的ext4文件系统格式（64-bit feature），最大分区大小可以达到1EB,不小于10PB"
echo -e "\n\n"
echo "5.验证ext4文件系统最大文件名长度不小于255字节"
mount $HDisk /mnt
name=""
j=0
for i in {a..z}; do
    ranList[$j]=$i
    j=$(($j + 1))
done
for i in `seq 1 255`; do
   index=$(($RANDOM % $j))
   name=$name${ranList[$index]}
done
touch /mnt/$name || res=1
ls /mnt
echo  "判断用例是否执行成功"
[ "$res" = "0" ] && echo -e "\033[32m-----------------test PASSED----------------\033[0m" || echo -e "\033[31m-----------------test FAILD----------------\033[0m"
echo "测试完成，清理环境"
umount $HDisk
wipefs -a $HDisk

if (( $(echo "$disk_size > 1" | bc -l) )); then
    parted $HDisk_full rm 1
fi
[ "$bc_installed" = "0" ] && yum remove bc -y > /dev/null 2>&1 && echo "bc软件包卸载成功"
